﻿/*
 * zfilesys.h
 *
 *  Created on: 2014年10月3日
 *      Author: Fifi Lyu
 */

#ifndef INCLUDE_ZPSOE_ZFILESYS_H_
#define INCLUDE_ZPSOE_ZFILESYS_H_

#include "zpsoe/common.h"
#include <fstream>
#include <list>
#include <vector>

using std::list;
using std::vector;

namespace zpsoe {

namespace zfilesys {
ZPSOE_SHARED_LIB_API bool is_exist(const string &path);

// 创建目录
// make_parents: 创建父目录
ZPSOE_SHARED_LIB_API bool mk_dir(
        const string &path, const bool make_parents = false);

// 删除目录
// recursive: 递归删除
ZPSOE_SHARED_LIB_API bool rm_dir(
        const string &path, const bool recursive = false);

ZPSOE_SHARED_LIB_API bool create_file(const string &path);
ZPSOE_SHARED_LIB_API bool delete_file(const string &path);

ZPSOE_SHARED_LIB_API bool is_file(const string &path);
ZPSOE_SHARED_LIB_API bool is_dir(const string &path);

// 读取文件，返回字符串
ZPSOE_SHARED_LIB_API string read_file(const string &file_name);

// 读取文件，每行内容为一个元素加入到列表，返回列表，
ZPSOE_SHARED_LIB_API void read_file(
        const string &file_name,
        vector<string> &lines);

ZPSOE_SHARED_LIB_API void write_file(
        const string &file_name,
        const string &file_content,
        const bool &append = false);

ZPSOE_SHARED_LIB_API void write_file(
        const string &file_name,
        const vector<string> &lines,
        const bool &append = false);

// 获取文件大小，单位字节(byte)
ZPSOE_SHARED_LIB_API byte_t get_size(const string &file_name);

// 获取指定目录的文件或子目录列表(不会递归)
// file_type:
//     FT_DIR，表示获取目录
//     FT_FILE，表示获取文件
//     FT_ALL，表示获取目录和文件
//
// max_num:
//      防止因为超大数量的文件和目录，导致性能问题
ZPSOE_SHARED_LIB_API void get_files_in_dir(
        const string &path,
        const file_type_t t,
        vector<file_stat_t> &v,
        const uint32_t max_num = 10000);
} /* namespace zfilesys */

} /* namespace zpsoe */

#endif /* INCLUDE_ZPSOE_ZFILESYS_H_ */
